package com.zhiyou100.entity;

import cn.hutool.core.util.ObjectUtil;
import com.sun.org.apache.regexp.internal.RE;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.formula.functions.T;

import java.util.List;

/**
 * pageInfo 分页bean
 *
 * 顺序：
 * setCount -> setPageSize -> setPageNumber  -> setList
 *
 * @author yang
 * @version 1.0.0
 * @date 2020-09-29 21:51
 */
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageInfo<T> {
    /**
     * 每页显示的条数
     */
    private Integer pageSize;
    /**
     * 总条数
     */
    private Integer count;
    /**
     * 当前页数
     */
    private Integer pageNumber;
    /**
     * 总页数
     */
    private Integer pageTotal;
    /**
     * 开始下标
     */
    private Integer startIndex;
    /**
     * 获取的 lsit
     */
    private List<T> list;

    /**
     * 计算总页数
     *
     * @return 总页数
     */
    public Integer getPageTotal() {
        return (int) Math.ceil(count * 1.0 / pageSize);
    }

    /**
     * 获取开始下标
     *
     * @return 开始下标
     */
    public Integer getStartIndex() {
        return (pageNumber-1) * pageSize;
    }

    /**
     * 设置当前页数
     *
     * @param pageNumber 当前页数
     */
    public void setPageNumber(Integer pageNumber) {
        if (ObjectUtil.isNull(pageNumber) || pageNumber <= 0) {
            this.pageNumber = 1;
        } else if (pageNumber > getPageTotal()) {
            this.pageNumber = getPageTotal();
        } else {
            this.pageNumber = pageNumber;
        }
    }

    /**
     * 设置 每页显示的条数
     * @param pageSize 参数
     */
    public void setPageSize(Integer pageSize) {
        if (ObjectUtil.isNull(pageSize) || pageSize <= 0) {
            this.pageSize = 10;
        } else if (pageSize > getCount()) {
            this.pageSize = getCount();
        } else {
            this.pageSize = pageSize;
        }
    }
}
